我刚刚开始使用.htaccess,我在这里遇到问题。
在我的public_html文件夹中,我有这些文件。
当我去profile.php文件时,我有一些参数。
http://website.com/profile.php?id=1&name=Doe
为了显示更好的搜索引擎优化链接,我试图让它看起来像这样
使用此重写条件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ profile.php?url=$1 [QSA,L]
</IfModule>
取决于这个答案(click here)
然后在我的php文件中我得到了用户的id
所以我可以使用此代码进行查询等
$path_components = explode('/', $_GET['url']);
$ctrl=$path_components[0];
但问题是如果我这样做,我文件夹中的每个文件都试图制作Rewrite Rule
,但我想要一个特定的文件...... profile.php
。
EDiT 1:
所以从下面的评论我做了这个htaccess文件,无论我的服务器上是否启用了mod_rewrite,链接都没有改变。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/profile.php$ [NC]
RewriteRule ^([^/.]+)/([^/.]+)(?:/)?$ /profile.php?id=$1&name=$2 [L]
</IfModule>
我的php文件现在..
$path_components = explode('/', $_GET['id']);
$ctrl=$path_components[0];
但链接
http://website.com/profile.php?id=1&name=Doe
根本没有改变。
答案 0 :(得分:1)
您需要将旧网址重定向到新网址,将其置于现有规则之上
RewriteEngine on
RewriteCond %{THE_REQUEST} /profile\.php\?id=([0-9]+)&name=(.+)\sHTTP [NC]
RewriteRule ^ /%1/%2? [L,R]
RewriteRule ^([^/]+)/([^/]+)/?$ /profile.php?id=$1&name=$2 [L]
答案 1 :(得分:0)
您好问题很简单:您应该从重写过程中排除现有文件/文件夹。 我建议只有一个index.php页面,您可以在一个地方获得所有请求和处理。无论如何,你的工作htaccess文件应如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
# exclude real folders/files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^ index.php [L] - # redirect anything to index
# for your version
RewriteRule ^(.*)$ profile.php?url=$1 [QSA,L]
</IfModule>