我正在尝试使用htaccess文件和PHP生成seo友好的url。但是它不工作。
我在本地主机上尝试了下面的代码(运行XAMPP)
RewriteEngine On
RewriteBase /real/
RewriteRule ^property-details/([0-9a-zA-Z]+) property-details.php?pid=$1 [NC, L]
实现相同的结果有不同的方法,但这将给您一个指导。
首先激活mod_rewrite,取消httpd.conf或apache2.conf文件中这一行的注释:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
将AllowOverride从none更改为All到www目录
<Directory />
AllowOverride All
Require all denied
</Directory>
重新启动apache:
sudo apachectl restart
或
sudo service apache2 restart
在你的www文件夹中创建一个。htaccess文件,并添加如下内容:
# | SEO URL
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*$ ./index.php
然后在index.php文件中:
<?php
$url_params=get_url_params();
// then access your url_params
if (isset($url_params[1]))
{
switch ($url_params[1])
{
case 'login':
echo "<h1>Login</h2>";
break;
case 'contact':
echo "<h1>Cantact</h2>";
break;
default:
echo "<h1>Home</h2>";
break;
}
}
function get_url_params($site_url='')
{
$base_url=explode("/", $site_url);
$request = $_SERVER['REQUEST_URI'];
$url_params = explode("/", $request);
$delete_extensions=array('.html','.htm');
$data[]=array();
foreach ($base_url as $b)
{
unset( $url_params[array_search( "$b", $url_params )] );
}
foreach ($url_params as $u)
{
foreach ($delete_extensions as $e){
$u=str_replace($e, "", $u);
}
$data[]=$u;
}
return $data;
}
?>
[NC, L]
您需要删除RewriteRule
标志之间的空格。这将导致500 Internal Server错误-在这种情况下,您应该检查错误日志以查找更有意义的错误。它应该写成:
[NC,L]
没有空格。
更新:对于mod_rewrite工作在每个目录。htaccess文件,FollowSymLinks
也必须启用(如果它还没有)。在.htaccess文件的最上面,包括:
Options +FollowSymLinks