我在htaccess中使用重写规则来获取slug的页面数据。
我通过向.htaccess添加行来手动完成:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^עמוד-מסוים$ /page.php?id=1 [L]
RewriteRule ^דוגמא-לעמוד$ /page.php?id=2 [L]
RewriteRule ^דוגמא-נוספת$ /page.php?id=3 [L]
RewriteRule ^טקסט-כלשהו$ /page.php?id=4 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]
它的工作正常但我每次都需要添加新的.htaccess行。
我的数据库表有Id和Slug(以及其他信息) 我的page.php使用$ _GET [' id'],然后通过此ID从DB中选择其他数据。
我试过这样的事情:
htaccess的:
RewriteRule ^page/([^/]*)$ /page.php?id=$1 [L]
page.php文件:
$id=$_GET['id'];
if(is_int($id)==false){ // if slug was enterd
$result=$mysqli->query("SELECT `id` FROM `pages` WHERE `slug`='$id' limit 1");
while($row=mysqli_fetch_assoc($result)){
$id=$row['id'];
}//query
}
但网址看起来不像我想要的(添加/ page / to url)
我也试过了:
htaccess的:
RewriteRule ^/([^/]*)$ /page.php?id=$1 [L]
但是我的网站上的其他网址(未连接到page.php)会出现问题
如何在不添加htaccess行的情况下使其正常工作?
编辑: 当我尝试这个.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]
我在所有页面上都出错了,如果我向上移动RewriteRule ^ /?([^ /] +)$ /page.php?id=$1 [L],只有page.php文件能正常工作(博客和联系不起作用)并且非WWW网址也不会有效。
答案 0 :(得分:0)
您可以尝试添加一些条件,例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]
过滤掉所有现有文件和目录。
另外,您可能需要考虑sanitizing your $id parameter before you stick it in a query
答案 1 :(得分:0)
找到解决方案。这工作完美:
ErrorDocument 404 /404.php
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]