2017-05-09 85 views
1

有没有可能用全局获取变量来重写url的,而不是特定的文件?为.htaccess重写规则

更改

http://example.com/{something}?id=1 

要:

http://example.com/{something}/id/1 

或者无字ID:

http://example.com/{something}/1 

这是我走到这一步:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/$ $1.phtml 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.phtml 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 

有了这个我可以删除.phtml扩展名

我希望有一个具体的答案!

+0

问正确的问题:是否可以在替换中使用模式的匹配部分?答案是肯定的,文档解释了如何。 – CBroe

+0

@CBroe我不明白这个问题,也没有答案。你在说什么文件? – joostdelange

+0

你怎么没有通过检查你想使用的技术的文档来启动? http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule – CBroe

回答

0

我假设的东西是一个PHP文件,

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/id/([\d]+)$ $1.php?id=$2 [L] #with id in between 

RewriteRule ^([\w-]+)/([\d]+)$ $1.php?id=$2 [L] #without id in between 

你必须确保规则不冲突。

+1

非常感谢!这像一个魅力。标记为正确的答案。 – joostdelange

+0

只有数字才有可能吗? – joostdelange

+0

表达式中的'\ d'只允许编号。 –