mod_rewrite转换:XXX-YYY到XXX.php?sub1 = YYY

时间:2013-10-22 18:31:53

标签: php apache .htaccess mod-rewrite url-rewriting

我正在使用ubuntu LAMP而我正在尝试使用mod_rewrite转换网址,例如:

  • site / XXX to site / XXX.php和
  • site / XXX-YYY to site / XXX.php?sub1 = YYY

我已经使用了这个重写规则:

RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2

在我的OSX上本地工作他们工作正常,无论如何当在ubuntu服务器上传.htaccess时,调用site / test我无法访问site / test.php但是我得到了404。 Mod_rewrite正在工作,实际上404页面设置在同一个.htaccess中并且有效。 在本地我在一个文件夹中使用它:localhost / myfolder / ....而在远程我使用子域的根: app.sitename.com /....

有人可以帮助我吗?

这是完整的代码:

RewriteEngine On
RewriteRule ^altro&(.+)? ./altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ ./$1.php [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ ./$1.php?sub1=$2&sub2=$3&sub3=$4
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ ./server/php/files/$1/$2/$3/$4.$5

第一个指令正在运作!事实上,site / altro&代码打开了altro.php?代码

2 个答案:

答案 0 :(得分:1)

这可能有助于调试:

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

来源:How to debug Apache mod_rewrite

(你不能把它放在.htaccess中。你必须把它放在VirtualHost配置中。)

答案 1 :(得分:0)

你可以尝试这段代码:

RewriteEngine On

RewriteRule ^([a-zA-Z0-9]+)/?$ $1.php [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)/?$ $1.php?sub1=$2 [L,QSA]

完整.htaccess代码:

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteRule ^altro&(.+) altro.php?$1 [L,QSA,NC]
RewriteRule ^([a-zA-Z0-9]+)$ $1.php [L]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)$ $1.php?sub1=$2&sub2=$3&sub3=$4 [L,QSA]
RewriteRule ^([a-z]+)-([a-z]+)-([0-9]+)-([a-zA-Z0-9_]+).([a-zA-Z]+)$ server/php/files/$1/$2/$3/$4.$5 [L,QSA]