Opened 13 years ago
Closed 9 years ago
#21167 closed enhancement (wontfix)
Problem with custom permalinks
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 3.4 |
Component: | Permalinks | Keywords: | needs-patch dev-feedback |
Focuses: | Cc: |
Description
I am currently moving my blog (http://kaffeeringe.de/) to Wordpress and I don't want to break my old URLs (Cool URLs don't change). The problem is, that these custom URLs don't work in Wordpress 3.4.1:
/blog/%postname%/%post_id%.html works
/blog/%postname%.%post_id%.html (which I need) doesn't work.
It doesn't work with the . in between these parameters…
I hope somebody is able to help me.
Attachments (4)
Change History (31)
#3
@
13 years ago
- Resolution invalid deleted
- Status changed from closed to reopened
Sounds like a bug to me. We allow random characters in a URL permalink structure, like ".html". Would be interesting to see where and why this fails.
#5
@
13 years ago
- Type changed from defect (bug) to enhancement
Looks like our support for this is quite tenuous. Many combinations work, but mostly by happenstance.
#6
@
13 years ago
/%postname%.%post_id%/ fails
/%year%.%monthnum%.%postname%/ works
/%post_id%.%postname%/ works
/%postname%.%year%/ works
Well now that's just odd...
#7
@
13 years ago
- Cc sirzooro added
I checked this and found that dot is not escaped when generating rules, e.g.:
'([^/]+).([0-9]+)(/[0-9]+)?/?$' => 'index.php?name=$1&p=$2&page=$3'
Other special RX chars may also cause problems here - need to check if patch will work with them too.
#8
@
13 years ago
- Keywords has-patch added
21167.patch is an attempt to escape the special characters which are currently allowed in permalink structure and are acceptable in terms of valid URLs.
Seems to work in the following cases:
/%postname%.%post_id%/ /%postname%+%post_id%/ /%postname%$%post_id%/ /%postname%(%post_id%)/
#9
follow-up:
↓ 10
@
13 years ago
Is there any reason why we can't just run the permastructure through preg_quote()?
> preg_quote( '.+/()$[]%' ); \.\+/\(\)\$\[\]%
#10
in reply to:
↑ 9
@
13 years ago
Replying to dd32:
Is there any reason why we can't just run the permastructure through preg_quote()?
Thanks, that indeed makes more sense.
#12
@
13 years ago
- Cc kpayne@… added
Unit test added, 21167.2.patch looks good. Let me know if there are any test cases missing.
#20
@
12 years ago
- Resolution fixed deleted
- Status changed from closed to reopened
The fix is probably incomplete. We should be passing the second argument on preg_quote and use the same delimiter where rewrite rules are being used.
For example, having the following permalink structure "/%post_id%#foo" (yes, probably unrealistic) would produce an invalid regular expression in wp-includes/class-wp.php, where # is used as a delimiter.
http://core.trac.wordpress.org/browser/trunk/wp-includes/rewrite.php#L344
http://core.trac.wordpress.org/browser/trunk/wp-includes/class-wp.php#L204
#22
@
12 years ago
Seems to me like this should be preg_quote()'d before getting used in a regexp, rather than on save.
This isn't a bug - Trac is for submitted bugs in WordPress :)
You should post in the WordPress forums instead (and I would in this case use a .htaccess to parse /blog/%postname%.%post_id%.html into /blog/%postname%/%post_id%/ (or anything else you wanted)
http://wordpress.org/support if you need more help.